﻿// 数组
// 用于存储大量相同类型的有序集合
// 声明
// 数据类型[] 数组名;
int[] arr;
// 初始化数组
// new 分配内存空间
arr = new int[10]; // 数组的秩（长度）
// 赋值
// 1 在初始化时
int[] arr2 = new int[10] { 11, 22, 33, 44, 55, 66, 77, 88, 99, 00 };
// 2 通过下标 数组的下标 从0开始
arr2[0]  = 100; // 访问数组元素

// 下标 >= 数组长度 下标越界

// 遍历数组
for (int i = 0; i < arr.Length; i++)
{
    //Console.WriteLine(arr2[i]);
}

// 二维数组
// 声明
int[,] arr3;
// 初始化
// new int[row,col] [y,x]
// 三维则是 [z,y,x]
arr3 = new int[3, 4]
{
    { 1, 1, 1, 1 },
    { 1, 0, 0, 1 },
    { 1, 1, 1, 1 }
};

for (int i = 0;i < arr3.GetLength(0); i++)
{
    for (int j = 0; j < arr3.GetLength(1); j++)
    {

    }
}

// 文件的读取
// 判断文件是否存在
string fileName = "../../../map.csv";
int[, ] map = new int[20, 30];
if (File.Exists(fileName))
{
    // 读取文件, 这里using表示只在这里读取(使用？)，出了之后释放？以免内存泄漏
    using (StreamReader sr = new StreamReader(fileName))
    {
        string data = sr.ReadToEnd();
        // 字符串分割 Split, 这里的文本中用",""换行"分离
        string[] lines = data.Split('\n'); // 分隔的也可使字符串
        for (int i = 0; i < lines.Length; i++)
        {
            string[] elements = lines[i].Split(',');
            for (int j = 0; j < elements.Length; j++)
            {
                map[i, j] = int.Parse(elements[j]);
            }
        }
    };
}


void DrawMap(int[, ] data)
{
    for(int i = 0; i < data.GetLength(0) ; i++)
    {
        for(int j = 0;j < data.GetLength(1) ; j++)
        {
            // 根据地图数据 绘制相应符号
            if (data[i, j] == 0)
            {
                // 如果地图数据是“墙” 那我就画墙
                Console.SetCursorPosition(j, i); Console.Write("0");
            }
        }
    }
}

DrawMap(map);

Console.Read();

// 交错数组